[MOSS]Problemas con el RenderAsHtml 

Tags: MOSS/WSS

 

Un contratiempo bastante extraño que me ha ocurrido hoy con un WebPart desarrollado por nosotros que visualiza elementos de una biblioteca de documentos.

Al añadirlo a una página que ya contenía mas WebParts de visualización de elementos se comportaba de manera errática, al editar un documento desde el menú desplegable del propio elementos accedía en modo edición a los elementos de otra lista, y sin embargo cuando el WebPart se encontraba el solo en una página todo este comportamiento extraño desaparecía.

 

Después de pasar todo el día dándole vueltas y buscando alguna información al respecto me tope con este post de los foros de MSDN, donde a alguien le ocurría lo mismo.

En resumen el problema ocurre debido al hecho de que los enlaces que se crean automáticamente en el desplegable de los elementos de cualquier lista, están basados en un objeto de JavaScript "ContextInfo()", y el método RenderAsHtml() siempre llama a estos objetos ctx1, así que en el momento que coinciden varios WebParts de visualización de elementos que usan este método pues MOSS se hace un lío, y lo que tu crees que es una acción de edición sobre un documento de la lista A se convierte en una edición de un elemento de la lista B en el mejor de los casos, normalmente no encuentra el elemento....

 

Para resolverlo como bien dice Nicky W. en el post anteriormente mencionado, pues hay que capturar el texto que se genera con el RenderAsHtml() y modificar las referencias a "ctx1" tal y como muestra el siguiente código:

SPList list = web.Lists[list name];
SPView view = list.DefaultView;
lit = new Literal();
lit.Text = view.RenderAsHtml();
lit.Text =lit.Text.Replace("ctx1",string.Format("ctx{0}",N.ToString()));
lit.Text = lit.Text.Replace("ctxId = 1", "ctxId= " +N.ToString());
lit.Text = lit.Text.Replace("CtxNum=\"1\"", "CtxNum=\""+ N.ToString() +"\"");
phGrid.Controls.Add(lit);

 

Donde N es un valor incremental, si vais a renderizar varios controles del mismo tipo o aleatorio, si solo vais a renderizar uno, pero siempre que no sea un 1.

 
Publicado por Alvaro Arias Conde en 14-Apr-09
0 Comentarios  |  Trackback Url |        
 

Comentarios

Nombre:
URL:
Email:
Comentarios:
CAPTCHA Image Validation